Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

267
Vistas
¿Cómo usar TypeScript "keyof" para crear una interfaz para la interfaz API genérica?

Tengo problemas para usar el sistema de tipos de TypeScript para modelar una interfaz genérica para llamar desde Lua a TypeScript. Para que esto funcione, el desarrollador debe definir una interfaz de TypeScript que defina los métodos de TypeScript a los que Lua puede llamar. Los detalles no importan mucho aquí, ya que el ejemplo simple a continuación ilustra mi confusión.

KeyofDemo

Como puede ver en el código anterior, tengo "ApiInterface", que define métodos arbitrarios que un desarrollador puede querer invocar desde Lua. Todos estos métodos toman un primer argumento que es un objeto (similar a 'esto'), y los argumentos restantes pueden ser lo que el desarrollador necesite pasar de Lua al método TypeScript. En la práctica, los únicos tipos compatibles con estos argumentos restantes son primitivas como número, cadena, booleano, nulo. En el código de ejemplo anterior, definí 3 de estos métodos API, pero el desarrollador puede definir los métodos que desee. El objetivo de este módulo Lua-to-TypeScript es ser genérico y no estar vinculado a ninguna definición particular de "ApiInterface".

El tiempo de ejecución eventualmente empaqueta la llamada al método Lua-to-TypeScript en un objeto de tipo ApiCall, que puede ver que está definido con campos para el nombre del método, el objeto JavaScript que se usará para "esto" y los argumentos arbitrarios restantes.

Para ilustrar mi confusión, he mostrado una KeyofDemo para ilustrar el error de TypeScript que recibo. Hay un método de "ejecutar" en la clase KeyofDemo que quiere tomar el objeto ApiCall e invocar la función TypeScript/JavaScript correspondiente.

Puede ver el ondulado rojo debajo de la invocación real del método en los dos casos. Un caso es donde no hay argumentos adicionales (más allá del argumento "este" requerido), y el otro caso es cuando ApiCall.args en realidad se completa con una matriz de argumentos para pasar de Lua a TypeScript.

El mensaje de error del primer caso rojo ondulado es: A spread argument must either have a tuple type or be passed to a rest parameter .

El mensaje de error del segundo caso rojo ondulado es: Expected 3 arguments but got 1 .

Ninguno de estos mensajes de error tiene ningún sentido para mí. Si trato de compilar el código TypeScript anterior, el compilador informa errores similares.

¿Cómo puedo hacer que el sistema de tipos de TypeScript modele mejor el comportamiento que he descrito? Por ahora, he solucionado el problema cambiando las líneas 23 y 25 del caso "this.api" a "any", y esto cierra el compilador de TypeScript. Pero me gustaría saber cómo modelar correctamente este problema.

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

El primer error se debe a que Javascript/Typescript no admite el uso de operadores de distribución en los parámetros, a menos que su función esté configurada para hacerlo.

Tienes que configurar la función para aceptar parámetros variados.

 interface ApiInterface { apiMethod0(thisObj: Object, ...args: any[]): void apiMethod1(thisObj: Object, ...args: [string]): void apiMethod2(thisObj: Object, ...args: [number, boolean]): void }

Ver este código en el patio de recreo

El segundo error se debe a que todos los métodos deben tener la misma "forma" o tener el mismo número de parámetros. En este caso matamos a los dos pájaros con el mismo tiro.

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda